package com.circle.interests.api.service;


import com.circle.interests.api.dto.*;

import java.util.List;

/**
 * 活动奖品服务
 *
 * @author zhou
 * @date 2021/12/5
 */
public interface DubboActPrizeService {

    /**
     * 分配活动奖品库存
     *
     * @param actCode            活动编号
     * @param prizeInventoryList 库存信息
     */
    void allocateActInventory(String actCode, List<PrizeInventoryDto> prizeInventoryList);

    /**
     * 指定用户得指定奖品
     *
     * @param actCode   活动编号
     * @param openId    用户openId
     * @param prizeCode 奖品编号
     * @return 中奖信息
     */
    PrizeWinResultDto winPrize(String actCode, String openId, String prizeCode);

    /**
     * 指定用户得指定金额的奖品(随机红包)
     *
     * @param actCode   活动编号
     * @param openId    用户openId
     * @param prizeCode 奖品编号
     * @param price     奖品金额（随机金额红包）
     * @return 中奖信息
     */
    PrizeWinResultDto winPrize(String actCode, String openId, String prizeCode, Integer price);

    /**
     * 领取奖品
     *
     * @param actCode        活动编号
     * @param openId         用户openId
     * @param recordId       中奖记录id
     * @param writeOffQrCode 核销二维码，红包类直冲奖品该参数可为空
     */
    PrizeReceiveResultDto receivePrize(Long recordId, String writeOffQrCode);

    /**
     * 设置奖品过期
     *
     * @param recordId 中奖记录id
     */
    void expirePrize(Long recordId);

    /**
     * 回收单个奖品
     *
     * @param recordId 中奖记录id
     */
    void recyclePrize(Long recordId);

    /**
     * 核销奖品，线下卡券类奖品通过接口核销，直充红包类奖品自动核销
     *
     * @param writeOffDto 核销参数
     * @return 核销结果
     */
    UserPrizeDto writeOff(WriteOffDto writeOffDto);
}
